A computer includes one or more processors, communications devices, and media. The media is used to store code, that is, physical representations of data. The communications devices provide for transferring code. The processors operate on some of the code (representing data) in accordance with other code representing executable data, i.e., instructions. Hereinbelow, as is common practice, context indicates whether “data” and “instructions” refer to abstract entities or to physical representations of those entities.
Instructions can be organized into programs that define the functionality of a computer hosting the programs. Initially, programs had to be re-coded to run on different computers. However, programs called “operating systems” were developed to provide a standard interface between other programs and the underlying computer hardware.
It can be desirable to transfer a computer's functionality to another computer; for example transfers can be useful for balancing workloads or responding to failures. An operating system can be designed to record its own state, the states of any programs running on the operating system, and the state of the hardware, on which the operating system runs. The resulting record can be used to reestablish that state on a new computer, provided the new computer is nominally the same as the old computer. In general, it is not generally feasible for a computer to assume a state of a computer with different hardware. However, the problems associated with hardware differences can, in effect, be smoothed over using virtual machines.
A virtual machine, i.e., a virtual computer, is not a computer or a machine, but is a program that functions as a computer that can host an operating system. While a computer along with the programs running on that computer is a combination is hardware and software, a virtual machine along with the programs running on it is all data. Therefore, unlike a real computer, a virtual machine can be stored in a file and/or transmitted over a network, e.g., from one computer to another, while preserving all the state information relevant to any programs running on the virtual machine.
A hypervisor is an operating system that virtualizes the hardware it controls to provide one or more virtual machines. Each virtual machine can host a guest operating system which, in turn, can host application and other programs. At least some hypervisors can take a snapshot of a virtual machine (executing on the hypervisor). The snapshot can be in the form of a file that can be stored, duplicated, and/or transferred to another computer running another instance of the same hypervisor. In either case, the snapshot preserves the state of the virtual machine when the snapshot was taken so that, upon restoration, the virtual machine can start from where it left off.